home *** CD-ROM | disk | FTP | other *** search
Visual Basic class definition | 1996-12-04 | 3.0 KB | 101 lines |
- VERSION 1.0 CLASS
- BEGIN
- MultiUse = -1 'True
- END
- Attribute VB_Name = "CoffeeTracker"
- Attribute VB_GlobalNameSpace = False
- Attribute VB_Creatable = True
- Attribute VB_PredeclaredId = False
- Attribute VB_Exposed = False
- Option Explicit
-
- ' CoffeeTracker is a small private object
- ' ============= for keeping track of
- ' a task a Coffee object is executing.
- ' The reason for using an object is that
- ' WithEvents variables cannot be in
- ' arrays. In order to have a varying
- ' number of them, you have to have a
- ' class of objects to keep the WithEvents
- ' variables.
- '
- ' Set the ThreadID and Size before you start
- ' the long task; set the Coffee property
- ' JUST before you call StartLongTask. ID
- ' is assigned by the NewTracker procedure
- ' in frmThread; it's the object's index
- ' in the CoffeeTrackers Collection object.
-
- Public ThreadID As Long
- Public Size As Long
- Public ID As String
-
- ' Storage for the Coffee object being tracked.
- Private WithEvents mwCoffee As Coffee
- Attribute mwCoffee.VB_VarHelpID = -1
- '
- ' Start time (from timeGetTimer API).
- Private mlngStart As Long
-
- Public Property Get Coffee() As Coffee
- Set Coffee = mwCoffee
- End Property
- Public Property Set Coffee(ByVal NewValue As Coffee)
- ' Save the start time.
- mlngStart = timeGetTime
- Set mwCoffee = NewValue
- End Property
-
- ' The Coffee object raises a Complete
- ' event when the task being tracked
- ' is complete. CoffeeTracker puts
- ' information about the task (thread
- ' ID, size, and seconds per iteration)
- ' into a list box on frmThread.
- '
- Private Sub mwCoffee_Complete(ByVal Canceled As Boolean)
- Dim lngEnd As Long
- Dim dblElapsed As Double
-
- lngEnd = timeGetTime
- '
- ' Free the Coffee object.
- Set mwCoffee = Nothing
- '
- ' Add a report line to the list box.
- If Canceled Then
- frmThread.lstResults.AddItem ThreadID _
- & " (" & Size & ") canceled", 0
- Else
- frmThread.lstResults.AddItem ThreadID _
- & " (" & Size & ") " _
- & (CDbl(lngEnd) - mlngStart) / Size / 1000# _
- & " sec/iteration", 0
- End If
- '
- ' CoffeeTracker removes its reference
- ' from the collection, leaving itself
- ' without references -- so that it
- ' can terminate.
- frmThread.CoffeeTrackers.Remove ID
- End Sub
-
- ' For long tasks, Coffee events raise
- ' a Progress event for every 10% of the
- ' task it completes. CoffeeTracker adds
- ' an entry to the list box on frmThread.
- '
- Private Sub mwCoffee_Progress(ByVal PercentDone As Single, Cancel As Boolean)
- frmThread.lstResults.AddItem ThreadID _
- & " (" & Size & ") " _
- & Format$(PercentDone * 100, "#0.0") & "%", 0
- '
- ' As each CoffeeTracker notices the
- ' global Cancel flag, it turns off
- ' the long task it's been watching.
- ' The Coffee object will then raise
- ' a Complete event (see above).
- If frmThread.CancelAll Then Cancel = True
- End Sub
-
-